package cn.edu.wdu.jinyuchen;

import java.lang.reflect.Method;

public class AppJinYuChen {
    public static void main(String[] args) throws Exception {
        //randomAlphabetic: 随机生成指定位数的字母
        //String s = RandomStringUtils.randomAlphabetic(7);
        //System.out.println(s);

        /*----------面向对象思想--------------*/
        //创建 User 类的实例
        User user = new User();
        //为 name 属性赋值为 Tom
        user.setName("Tom");
        user.setAge(21);
        //打印 user 信息
        System.out.println(user);
        /*-------------------------------------*/

        /*-----通过类的完整限定名加载类对象-------*/
        //类的完整限定名 = 类名 + 包名
        //得到的这个 uu 相当于 User 类
        Class<?> UU = Class.forName("cn.edu.wdu.jinyuchen.User");
        //通过 UU（类对象）中的 User u = new User();
        Object o = UU.newInstance();

        //通过 UU （类对象）的 getMethod 方法查找指定名称的方法
        Method setName = UU.getMethod("setName", String.class);
        //使用实例 o 的 setName 方法为 o 的属性赋值
        //相当于前面的 user.setName("Tom");
        setName.invoke(o, "Jack");

        //通过 UU （类对象）的 getMethod 方法查找名称为 getName 的方法
        Method getName = UU.getMethod("getName");
        Object result1 = getName.invoke(o);
        System.out.println(result1);

        //通过 UU （类对象）的 getMethod 方法查找指定名称的方法
        Method setAge = UU.getMethod("setAge", Integer.class);
        //使用实例 o 的 setAge 方法为 o 的属性赋值
        //相当于前面的 user.setAge(10);
        setAge.invoke(o, 10);

        //通过 UU （类对象）的 getMethod 方法查找名称为 getName 的方法
        Method getAge = UU.getMethod("getAge");
        Object result2 = getAge.invoke(o);
        System.out.println(result2);

        System.out.println(o);
        /*-------------------------------------*/
    }

}
